/**
 * AIOT智能学习桌 - 硬件抽象层
 * 适配EBP3901开发板
 */

#ifndef HARDWARE_ABSTRACTION_H
#define HARDWARE_ABSTRACTION_H

#include <stdint.h>
#include <stdbool.h>

// GPIO引脚定义
#define ULTRASONIC_TRIG_PIN     7
#define ULTRASONIC_ECHO_PIN     8
#define BUZZER_PIN              9
#define LED_RED_PIN             6
#define LED_GREEN_PIN           10
#define LED_BLUE_PIN            11
#define BUTTON_FUNCTION_PIN     5
#define BUTTON_CALIBRATION_PIN  11

// UART配置 (ESP8266 WiFi模块)
#define WIFI_UART_TX_PIN        2
#define WIFI_UART_RX_PIN        3
#define WIFI_UART_BAUDRATE      115200

// I2C配置 (OLED显示屏)
#define I2C_SDA_PIN             4
#define I2C_SCL_PIN             5
#define OLED_I2C_ADDRESS        0x3C

// ADC配置 (麦克风)
#define MIC_ADC_CHANNEL         0
#define MIC_SAMPLE_RATE         16000

// PWM配置 (音频输出)
#define AUDIO_PWM_PIN           4
#define AUDIO_PWM_FREQ          44100

// 系统配置
#define SYSTEM_CLOCK_FREQ       72000000  // 72MHz
#define TICK_RATE_HZ            1000      // 1ms tick

// 硬件初始化函数
void hardware_init(void);
void gpio_init(void);
void uart_init(void);
void i2c_init(void);
void adc_init(void);
void pwm_init(void);
void timer_init(void);

// GPIO操作
void gpio_set_output(uint8_t pin, bool state);
bool gpio_read_input(uint8_t pin);
void gpio_set_mode(uint8_t pin, uint8_t mode);

// 超声波传感器
float ultrasonic_read_distance(void);
void ultrasonic_trigger(void);
uint32_t ultrasonic_measure_echo(void);

// LED控制
void led_set(uint8_t pin, bool state);
void led_blink(uint8_t pin, uint16_t times, uint16_t delay_ms);
void led_pwm_brightness(uint8_t pin, uint8_t brightness);

// 蜂鸣器控制
void buzzer_beep(uint16_t frequency, uint16_t duration_ms);
void buzzer_pattern(uint16_t* pattern, uint8_t length);

// 按键检测
bool button_is_pressed(uint8_t pin);
bool button_wait_press(uint8_t pin, uint32_t timeout_ms);

// OLED显示
void oled_init(void);
void oled_clear(void);
void oled_display_text(uint8_t x, uint8_t y, const char* text);
void oled_display_number(uint8_t x, uint8_t y, float number);

// WiFi通信 (ESP8266)
bool wifi_init(void);
bool wifi_connect(const char* ssid, const char* password);
bool wifi_send_http_request(const char* url, const char* data, char* response, uint16_t max_len);
bool wifi_is_connected(void);

// 音频处理
void audio_init(void);
void audio_start_recording(void);
void audio_stop_recording(void);
uint16_t audio_read_sample(void);
void audio_play_tone(uint16_t frequency, uint16_t duration_ms);
void audio_play_buffer(uint16_t* buffer, uint16_t length);

// 系统时间
uint32_t system_get_tick(void);
void system_delay_ms(uint32_t ms);
void system_delay_us(uint32_t us);

// 内存管理
void* system_malloc(size_t size);
void system_free(void* ptr);

// 中断处理
void enable_interrupts(void);
void disable_interrupts(void);
void register_interrupt_handler(uint8_t irq, void (*handler)(void));

#endif // HARDWARE_ABSTRACTION_H